import random


class People:
    # 发红包的余额，名字
    def __init__(self, left_money, name):
        self.left_money = left_money
        self.name = name

    # 报数
    def show(self):
        print(f"我是{self.name}, 余额{self.left_money}")


class Owner(People):

    # 发红包方法，发红包的数量，钱数
    def send_red_wallet(self, money, num):
        # 余额比要发红包的数量大，才能正常发红包
        if self.left_money >= money:
            print(f"发红包了，红包{money}元，发给{num}人")
            self.left_money -= money

        else:
            print("余额不够了")
            return []

        # 将红包分成小红包
        # 先均分红包
        avg_money = money // num
        # 均分红包后还剩余多少
        wallet_left = money % num
        # 分成小红包列表
        money_list = []
        for i in range(num):
            if i == num - 1 and wallet_left != 0:
                money_list.append(avg_money + wallet_left)
                break
            money_list.append(avg_money)
        return money_list


class Member(People):
    # 抢红包方法
    def catch_red_wallet(self, money_list):
        if len(money_list) != 0:
            # 随机从分好的红包中选择一个
            n = random.randint(0, len(money_list))
            # 要抢红包的金额
            mem_money = money_list[n]
            self.left_money += mem_money
            money_list.pop(n)
            return money_list
        else:
            print("红包没钱")
            return None


if __name__ == '__main__':
    # 发红包的金额
    owner_money = random.randint(10, 100)
    # 发红包的人数
    send_people = random.randint(5, 10)
    # 发红包群主的余额
    send_left_money = random.randint(10, 100)
    # 实例化群主类
    owner = Owner(send_left_money, "lili")
    # 调用发红包方法
    money_list = owner.send_red_wallet(owner_money, send_people)
    print(money_list)
    owner.show()

    # 这里可以弄个 for 循环，循环发出的红包个数，名字可以用faker库进行随机生成
    # 抢红包的人员余额
    mem_lef_money1 = random.randint(10, 50)
    # 实例化成员类
    mem1 = Member(mem_lef_money1, "molly")
    # 调用抢红包方法，返回剩余的红包数
    left_n = mem1.catch_red_wallet(money_list)
    mem1.show()
    print(left_n)
